package pro.cherish.knowledgedemoasync;


/**
 * @author 创建人：cherish
 * @version 版本号：V1.0
 * <p>
 * ***************************修订记录************************************
 * 2019-10-27 cherish 创建该类功能。
 * **********************************************************************
 * </p>
 * @ClassName 类名：T1
 * @Description 功能说明：
 * <p>
 * TODO
 * </p>
 * **********************************************************************
 * @date 创建日期： 2019-10-27 cherish
 */

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import pro.cherish.knowledgedemoasync.t1.People;
import pro.cherish.knowledgedemoasync.t1.Phone;

/**
 * 首先使用    @Async  必须使用spring容器，比如将实例交给ioc管理，使用时注入对象就可。
 * @Async定义的异步方法执行完成与否，主程序是不关心得
 * 搞不懂的是：主程序关闭了，怎么开启异步任务的log不打印了。只有在主线程末尾加上       Thread.sleep(10000);  异步任务才会执行完【即log会打印】
 */
@SpringBootTest
@Slf4j
public class T1 {
    @Autowired
    private People people;
    @Autowired
    private Phone phone;

    /**
     * 同步
     * 异步
     * 同步
     *
     * @throws InterruptedException
     */
    @Test
    public void doSomething() throws InterruptedException {
        people.getUp();
        people.takePhone_async();
        people.WearingShoes();
        Thread.sleep(10000);
        log.info("主程序结束");
    }


    @Test
    public void doSomething2() throws InterruptedException {
        people.getUp();
        phone.takePhone_async();
        people.WearingShoes();
        Thread.sleep(10000);
        log.info("主程序结束");
    }


    /**
     * 下面测试同一个类中调用
     */

}
